\chapter{Описание сервиса \textquotedblleftВысокопроизводительные вычисления HPC-TP\textquotedblright}
\pagenumbering{arabic}

Назначение - сервис создан в дополнение к сервису «Виртуальная машина» (ВМ) для проведения расчетов по программам,
требующих большую вычислительную мощность (терафлопного уровня). Основные работы по отладке программ, 
подготовки данных и визуализации результатов проводятся на ВМ (рабочая среда). Выполнение расчетов на 
высокопроизводительном кластере проводится с использованием системы очередей. 
Имеются 3 типа очередей –короткая short, длинная long, и бесконечная infinity. 

\section{Параметры очередей}

\subsection{short}
Высокий приоритет (задачи меньше стоят в очереди);
Процессорное время ограничено 6-ю часами;
Память ограничена 2 ГБ на процесс;
Реальное время ограничено 9 часами;
Количество задач разрешенных на выполнение одним пользователем - 5;
Количество задач в очереди от одного пользователя 20.

\subsection{long}
Низкий приоритет (задачи дольше стоят в очереди);
Процессорное время ограничено 48-ю часами;
Память ограничена 2 ГБ на процесс;
Реальное время ограничено 72-мя часами;
Количество задач разрешенных на выполнение одним пользователем - 2;
Количество задач в очереди от одного пользователя 10.

\subsection{infi}
Самый низкий приоритет (задачи дольше всех  стоят в очереди);
Процессорное время не ограничено;
Память ограничена 2 ГБ на процесс;
Реальное время не ограничено;
Количество задач разрешенных на выполнение одним пользователем – 1;
Количество задач в очереди от одного пользователя 5.

Доступ к очередям определяется конкретным договором (пользователем, задачей).

Для вычислений можно использовать 64 ядра (это 16 процессоров или 8 узлов).

Всего имеется 368 ядер, 46 узлов, 92 процессора.

Для обеспечения связи между узлами используются 1 Gb Eth и 10 Gb IB.

Оперативная память на узлах 16 GB (2GB на ядро) + 16GB swap.

Доступная дисковая память на ноде (/tmp) 3GB на процесс.

Дисковая память в домашней директории (/home/\$username) определяется конфигурацией ВМ и не рекомендуется для 
записи временных файлов из-за метода монтирования этой директории на рабочие узлы.

\section{Программное обеспечение}
\subsection{Операционная система}

SUSE Linux Enterprise Server 10.
\subsection{Библиотеки}
\subsubsection{OpenMPI-gcc  1.2}
		/usr/mpi/gcc/openmpi-1.2.5rc1
\subsubsection{MPICH	1.2}
		/opt/mpich/ch-p4
			/opt/mpich/ch-p4mpd

\subsubsection{OprnMPI-1.4.3}
		/usr/local/openmpi-1.4.3
Intel Composer XE  12.0.1.107
MKL,C,C++,Fortran		/usr/local/intel/
GCC 4.1			/usr/

Firefly 7.1.G 					/usr/local/firefly/mpich-dyn/
Gaussian 03 					/usr/local/g03/
Scilab 5.3.0					/usr/local/scilab-5.3.0/

Для пользования сервисом используются скрипты, в которых прописано необходимые параметры. Для самостоятельного использования интерфейса torque читайте часть 3, с необходимыми параметрами. 

Стандартные скрипты:
Для запуска задач 				submit-tp
Для мониторинга 				status-tp

Скрипт запуска задачи:
\begin{lstlisting}

~$ ./submit-tp --help
usage:  
        --input -i filename             #Файл данных, по умолчанию отсутствует
        --np -n N                           #требуемое кол-во ядер, по умолчанию 1
        --dir -d dirname                #директория, где будет исполнятся задача, по умолчанию текущая
        --file -f filename               #исполняемый файл (обязательная опция)
        --queue -q queue               #имя очереди (short, long или infinity). По умолчанию short
        --mpiver -v version           #версия MPI (mpich, openmpi-1.2, openmpi-1.4). По умолчанию mpi
        --outputfile -o file	  # файл с результатами, по умолчанию отсутствует, стандартный вывод сохраняется в файле «имя задачи».o.«номер задачи». 
        --help -h                           #сообщение о ключах
        --jobname -j jobname       #Имя задачи.По умолчанию  job.1295983423, где 1295983423 – сгенерированное число.
        --array -r numbers              #Номера задач в массиве задач (например 1-4, в этом случае запустяться 4 одинаковые задачи с именами «имя задачи»-1, «имя задачи»-2 и т.д.)

:~$ ./status-tp --help
        -f taskaname      #информация о задании с именем "taskname" выдается при запуске задания. Не путать с именем задачи, которое задается пользователем и не уникальное.
        -q queue           #информация о очереди "queue"
        -a                      #информация обо всех очередях
        -p                      #информация о состоянии кластера
 (количество свободных узлов и общее кол-во узлов.)
        -h                      # сообщение о ключах
Примеры

Пример 1. Запуск скрипта “Hello Word” на 1 ядре:

$ ./submit-tp –f  ~/helloword.sh
2880.pbs-tp.hpc.spbu.ru
$

результат:

$ ll job.1296029939.*
-rw------- 1 zar users 11 Jan 26 11:19 job.1296029939.e2880
-rw------- 1 zar users 11 Jan 26 11:19 job.1296029939.o2880

Пример 2. Запуск программы Pi скомпилированной openmpi-1.4 на 4-х нодах:

$ ./submit-tp -v openmpi-1.4 -j Pi-6 -n 4 -f Pi01 
2882.pbs-tp.hpc.spbu.ru

Просмотр всех очередей: 

$ ./status-tp -a

pbs-tp.hpc.spbu.ru: 
                                                                         Req'd  Req'd   Elap
Job ID               Username Queue    Jobname          SessID NDS   TSK Memory Time  S Time
-------------------- -------- -------- ---------------- ------ ----- --- ------ ----- - -----
2882.pbs-tp.hpc.     zar      long-zar Pi-6                --      4  --    --    --  R   -- 
   node-20/0+node-19/0+node-18/0+node-17/0

Результат:

$ ll Pi-6.*
-rw------- 1 zar users   0 Jan 26 11:26 Pi-6.e2882
-rw------- 1 zar users 138 Jan 26 11:28 Pi-6.o2882

Пример 3. Запуск пакета Firefly с тестовым примером.

$ ./submit-tp -i /usr/local/firefly/samples/condircbk.inp -n 2  -d /usr/local/firefly/mpich-dyn -f  /usr/local/firefly/mpich-dyn/firefly -j fireflay -v mpich -q short
2861.pbs-tp.hpc.spbu.ru

Результат

$ ll fireflay.*
-rw------- 1 viz users      0 Jan 25 18:02 fireflay.e2861
-rw------- 1 viz users      0 Jan 25 18:02 fireflay.o2861
-rw-r--r-- 1 viz users 992847 Jan 25 18:05 fireflay.out

В этом случае стандартного вывода нет – файл fireflay.o2861 пустой, но создан файл fireflay.out, где fireflay – это имя задачи, ключ –j.

Пример 4. Запуск теста linpack на 4 ядрах.

./submit-tp -i ~/linpack_10.3.0/benchmarks/mp_linpack/bin/linux/HPL.dat -n 4 -d ~/linpack_10.3.0/benchmarks/mp_linpack/bin/linux/ -f ~/linpack_10.3.0/benchmarks/mp_linpack/bin/linux/xhpl -q short -v mpich -j hpl4

В этом случае создается файл в директории: ~/linpack_10.3.0/benchmarks/mp_linpack/bin/linux, имя которого было  указано во входном файле ~/linpack_10.3.0/benchmarks/mp_linpack/bin/linux/HPL.

Пример 5. Мониторинг загруженности кластера:

$ ./status-tp -p
Total=368
Free=352

Здесь выводится полное кол-во доступных ядер Total и количество свободных ядер Free.

Пример 6. Запуск пакета Gaussian с тестовым примером.

$ ~/submit-tp -n 4 -f ~/submit-g03.sh -i ~/test695.com -o ~/test695-n1.log
2983.pbs-tp.hpc.spbu.ru

Результат:

-rw------- 1 viz users        0 Jan 28 13:18 job.1296209888.o2983
-rw------- 1 viz users       47 Jan 28 13:30 job.1296209888.e2983
-rw-r--r-- 1 viz users   966078 Jan 28 13:38 test695-n1.log

В этом случае стандартного вывода нет – файл  job.1296209888.o2983 пустой, но создан файл test695-n1.log.

Пример 7. Запуск массива задач в среде scilab с различным параметрами.

$ ./submit-tp -v pbs -q long -r 6-7 -f ./impkvart01.sh -j scilab-impedanec
3096.pbs-tp.hpc.spbu.ru
$

Исполняемый скрипт:

$ cat impkvart01.sh 
#/bin/sh!
export PATH=$PATH:/usr/local/scilab-5.3.0/bin
worckdir=`mktemp -d`;
cd $worckdir

cat << EOF > startall 
exec('$HOME/mathlab/all09.03.sce');
stacksize('max');
rt=stacksize()
SQS03('$HOME/math/B23_0708.ts',200,1000,100,0.$PBS_ARRAYID);
tr=stacksize()
exit
EOF

scilab -nwni -f startall

mv  $worckdir $HOME/${PBS_JOBNAME}.outdir
echo $HOME/${PBS_JOBNAME}.outdir


Рассмотрим исполняемый скрипт и объясним его содержание:
Объявление переменных окружения для исползуемого пакета Scilab.

export PATH=$PATH:/usr/local/scilab-5.3.0/bin  

Создание и преход в тестовую директорию (это будет происходить уже на рабочей ноде)

worckdir=`mktemp -d`;
cd $worckdir

Создание исполняемого скрипта scilab, с переменным параметром  $PBS_ARRAYID, котрый в нашем случае будет принимать значения 6 и 7.

cat << EOF > startall 
exec('$HOME/mathlab/all09.03.sce');
stacksize('max');
rt=stacksize()
SQS03('$HOME/math/B23_0708.ts',200,1000,100,0.$PBS_ARRAYID);
tr=stacksize()
exit
EOF

Запуск созданного скрипта

scilab -nwni -f startall

Копирование результатов и удаление их с рабочей ноды 

mv  $worckdir $HOME/${PBS_JOBNAME}.outdir

вывод в стандартный вывод имени каталога с результатом:

echo $HOME/${PBS_JOBNAME}.outdir

В итоге мы получаем 2 файла стандартного вывода:

-rw------- 1 zar users   36 Feb  6 14:48 scilab-impedanec.o3096-6
-rw------- 1 zar users   36 Feb  6 14:47 scilab-impedanec.o3096-7

В которых прописаны имена итоговых каталогов:

$ cat scilab-impedanec.o3096-6
/home/zar/scilab-impedanec-6.outdir
$

В итоговом каталоге мы видим результаты вычислений и сам сгенерированный скрипт, который запускался в scilab.

$ ll /home/zar/scilab-impedanec-6.outdir
total 6750
-rw-r--r-- 1 zar users    4995 Feb  6 14:47 R357.1000.100
-rw-r--r-- 1 zar users     147 Feb  6 14:34 startall
-rw-r--r-- 1 zar users 1717355 Feb  6 14:47 XYSQS00-IM.357.1000.100
-rw-r--r-- 1 zar users 1717355 Feb  6 14:47 XYSQS00-RE.357.1000.100
-rw-r--r-- 1 zar users 1717355 Feb  6 14:47 YXSQS00-IM.357.1000.100
-rw-r--r-- 1 zar users 1717355 Feb  6 14:47 YXSQS00-RE.357.1000.100
$
$ cat /home/zar/scilab-impedanec-6.outdir/startall 
exec('/home/zar/mathlab/all09.03.sce');
stacksize('max');
rt=stacksize()
SQS03('/home/zar/math/B23_0708.ts',200,1000,100,0.6);
tr=stacksize()
exit

Мы видим, что последний параметр, который у нас и был переменным в папке с префиксом -6 и равен 0.6. В папке с префиксом -7 – соответственно 0.7.


Пример 8. Мониторинг и удаление задания:


Видим в очереди задание, Job Id = «имя задания»

$ ./status-tp -a

pbs-tp.hpc.spbu.ru: 
                                                                         Req'd  Req'd   Elap
Job ID               Username Queue    Jobname          SessID NDS   TSK Memory Time  S Time
-------------------- -------- -------- ---------------- ------ ----- --- ------ ----- - -----
3097-5.pbs-tp.hp     zar      long-304 scilab-impedanec   2364     1  --    --    --  R 00:03
   node-ib-42/0

Смотрим подробные  характеристики задания

$ qstat -f 3097.pbs-tp.hpc.spbu.ru pbs-tp.hpc.spbu.ru
qstat: Unknown Job Id 3097.pbs-tp.hpc.spbu.ru
qstat: illegally formed destination: pbs-tp.hpc.spbu.ru
[zar@alice24 ~]$ ./status-tp -f 3097.pbs-tp.hpc.spbu.ru
qstat: Unknown Job Id 3097.pbs-tp.hpc.spbu.ru
Job Id: 3097-5.pbs-tp.hpc.spbu.ru
    Job_Name = scilab-impedanec-5
    Job_Owner = zar@alice24.spbu.ru
    resources_used.cput = 00:02:58
    resources_used.mem = 38336kb
    resources_used.vmem = 2316676kb
    resources_used.walltime = 00:02:59
    job_state = R
    queue = long-3046
    server = pbs-tp.hpc.spbu.ru
    Checkpoint = u
    ctime = Sun Feb  6 19:25:17 2011
    Error_Path = alice24.spbu.ru:/home/zar/scilab-impedanec.e3097-5
    exec_host = node-ib-42/0
    Join_Path = n
    Keep_Files = n
    Mail_Points = a
    mtime = Sun Feb  6 19:25:18 2011
    Output_Path = alice24.spbu.ru:/home/zar/scilab-impedanec.o3097-5
    Priority = 0
    qtime = Sun Feb  6 19:25:18 2011
    Rerunable = True
    Resource_List.nodect = 1
    Resource_List.nodes = 1:ppn=1
    session_id = 2364
    Variable_List = PBS_O_HOME=/home/zar,PBS_O_LANG=en_US.UTF-8,
        PBS_O_LOGNAME=zar,
        PBS_O_PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/zar/b
        in,PBS_O_MAIL=/var/spool/mail/zar,PBS_O_SHELL=/bin/bash,
        PBS_O_HOST=alice24.spbu.ru,PBS_SERVER=localhost,
        PBS_O_WORKDIR=/home/zar,PBS_O_QUEUE=long-3046,PBS_ARRAYID=5
    comment = Job started on Sun Feb 06 at 19:25
    etime = Sun Feb  6 19:25:18 2011
    submit_args = -t 5 -N scilab-impedanec -l nodes=1:ppn=1 -q long-3046@pbs-t
        p.hpc.spbu.ru file1297009516.sh
    job_array_id = 5
    job_array_request = 5
    start_time = Sun Feb  6 19:25:18 2011
    start_count = 1


Удаляем задание:

$qdel 3097.pbs-tp.hpc.spbu.ru

Проверяем удаление:

$ ./status-tp -f 3097.pbs-tp.hpc.spbu.ru
qstat: Unknown Job Id 3097.pbs-tp.hpc.spbu.ru
$


\section{Кластер Itanium}
Здесь будет информация о железе Itanium
 
\end{lstlisting}